home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Graphics Plus
/
Graphics Plus.iso
/
general
/
modelers
/
geomview
/
source.lha
/
Geomview
/
include
/
mgriP.h
< prev
next >
Wrap
C/C++ Source or Header
|
1993-11-05
|
5KB
|
127 lines
#include <stdio.h>
#include "mg.h"
#include "mgP.h"
#include "mgri.h"
#include "transform.h"
#include <ri/ri.h>
typedef struct mgricontext {
struct mgcontext mgctx; /* The mgcontext */
int born; /* Has window been displayed on the screen? */
int dying; /* Is the window being closed from titlebar? */
int win; /* window ID, or 0 */
int standalone; /* 1 if program ignores appkit, 0 otherwise */
/* (determains if events are prcssed by mg) */
int polymode; /* method to draw polyhedra via mgri_polylist*/
int lflushlimit; /* max polygons per RiPointsPolygon call */
/* for RI_LINE representation */
int fflushlimit; /* max polygons per RiPointsPolygon call */
/* for RI_PRIMITIVE representation */
int drawsfaces;
Transform W2C; /* current W2C xform */
Transform C2W; /* current C2W xform */
Transform W2S; /* camera-to-screen xform */
Transform O2S; /* current object-to-screen xform */
void (*callback)(struct mgricontext *c, int event);
Point3 cpos; /* current-coordinate position of camera
* (used for software normal flipping)
* (and quickrenderman line nudging */
int hascpos; /* cpos is valid */
/* following are for NeXTs */
char *nxwindow; /* this is really an id */
char *nxview; /* ditto */
RtToken qrmContext; /* the QuickRenderman context */
RtToken windowresource; /* each window has it's own context */
int debug; /* debug flag to output ri code to ri.rib */
RtToken debugContext; /* the context that will send ri to a file */
RtToken debugResource; /* resource that will send ri to a file */
RtInt mgvorigin[2]; /* MGView origin - tells QRMAN where to draw */
int plni; /* number of verticees in polyline buffer */
int plvi; /* number of polylines in polyline buffer */
int plbuffsize; /* size of the polyline buffer */
} mgricontext;
/* These are totally private, should not (yet) be in mgri.h */
enum {
MGRI_POLYGONS,
MGRI_POINTSPOLYGONS,
MGRI_DEVIDEDPOLYLIST
};
#define _mgric ((mgricontext*)_mgc)
extern mgricontext *MGRI; /* For debugging */
#define RI_X 0
#define RI_Y 1
#define RI_Z 2
#define GVMAXF 600 /* face drawing - vertices per RiPointsPolygons call */
#define GVMAXL 400 /* edge drawing - ditto */
#define SCRATCHSIZE 1024*32
extern RtPoint *ript; /* points */
extern RtColor *ricolor; /* rgb color */
extern RtPoint *rinormal; /* normals */
extern int *rippi; /* PointsPolygon polygon index array */
extern int rippis; /* PointsPolygon polygon index array size */
extern int *ripvi; /* PointsPolygon vertex index array */
extern int ripvis; /* PointsPolygon vertex index array size */
extern RtPoint *plp; /* vertices */
extern RtColor *plc; /* colors */
extern int *plvca; /* polyline vertex count array */
extern int *plvia; /* vertex index array */
/* the renderman<->oogl transform */
extern Transform cam2ri;
/* If you are running NS3.0 (default), uncomment the next line */
#define NS_3_0_SLOW
/* If you are running NS3.1 or higher, comment out the above line and */
/* uncomment this next line. This improves OFF and VECT performance */
/* but is still somewhat buggy as far as shading goes - performance only */
/* #define NS_3_X_FAST */
/* here we define a simple routines to realloc scratch buffers if necessary */
#define CHECK_VCN(nv,nc,nn) \
if(nv>SCRATCHSIZE) { \
ript = realloc(ript, nv*sizeof(RtPoint)); \
if(nc>SCRATCHSIZE) ricolor = \
realloc(ricolor, nc*sizeof(RtColor)); \
if(nn>SCRATCHSIZE) rinormal = \
realloc(rinormal, nn*sizeof(RtPoint)); \
}
#define CHECK_VC(nv,nc) \
if(nv>SCRATCHSIZE) { \
ript = realloc(ript, nv*sizeof(RtPoint)); \
if(nc>SCRATCHSIZE) ricolor = \
realloc(ricolor, nc*sizeof(RtColor)); \
}
/* here we define a simple normalization routine for HPt3 -> RtPoint */
/* we use this because it's somewhat faster then Hpt3Normalize */
#define mgri_normalize(src,rtpoint) \
{ register HPoint3 *hpt3 = src; \
*(Point3 *)(rtpoint) = *(Point3 *)(hpt3); \
if(hpt3->w!=1. && hpt3->w!=0.0) { \
rtpoint[RI_X]/=hpt3->w; \
rtpoint[RI_Y]/=hpt3->w; \
rtpoint[RI_Z]/=hpt3->w; \
} \
}
//void mgri_normalize(HPoint3 *p, RtPoint r);
void mgri_drawline(HPoint3 *p1, HPoint3 *p2, Color *c);
void mgri_drawpoint(HPoint3 *p);
void mgri_plflush();
void mgri_flushbuffer();
void mgri_processevents();
void mgri_closer();